Previously, we were preparing the root very late in the boot process;
right before we switch root. The issue with that is that most services
in the initrd that run `After=initrd-root-fs.target` expect that
`/sysroot` already points to the rootfs we'll be pivoting to. Running
this late violates that assumption.
This patch fixes this by making `ostree-prepare-root.service` instead
run right after `sysroot.mount` (the physical sysroot mounted by
systemd) but still before `initrd-root-fs.target` (which is the target
signalling that `/sysroot` is now valid and ready).
This should make it easier to integrate OSTree with other initrd
services such as Ignition.
Related: https://github.com/dustymabe/ignition-dracut/issues/20
Closes: #1759
Approved by: cgwalters
install() {
dracut_install /usr/lib/ostree/ostree-prepare-root
inst_simple "${systemdsystemunitdir}/ostree-prepare-root.service"
- mkdir -p "${initdir}${systemdsystemconfdir}/initrd-switch-root.target.wants"
+ mkdir -p "${initdir}${systemdsystemconfdir}/initrd-root-fs.target.wants"
ln_r "${systemdsystemunitdir}/ostree-prepare-root.service" \
- "${systemdsystemconfdir}/initrd-switch-root.target.wants/ostree-prepare-root.service"
+ "${systemdsystemconfdir}/initrd-root-fs.target.wants/ostree-prepare-root.service"
}
ConditionKernelCommandLine=ostree
ConditionPathExists=/etc/initrd-release
OnFailure=emergency.target
-After=initrd-switch-root.target
-Before=initrd-switch-root.service
-Before=plymouth-switch-root.service
+After=sysroot.mount
+Before=initrd-root-fs.target
[Service]
Type=oneshot